/***********************************************************************
*                                                                      *
*  H E A D E R - F I L E                                               *
*                                                                      *
*  8 0 5 9 2 - C A N   C O N T R O L L E R                             *
*                                                                      *
************************************************************************/


   /* Definition der einzelnen Bits im INTERRUPT-REGISTER   */
   /* des CAN-Controllers                                   */
   union can_interrupt_typ {
      struct {
         byte rec_int      : 1;
         byte trans_int    : 1;
         byte err_int      : 1;
         byte overrun_int  : 1;
         byte wakeup_int   : 1;
         byte not_used     : 3;
      } int_bits;
      byte int_byte;
   };


   /* Definition der einzelnen Bits im CONTROL-REGISTER   */
   /* des CAN-Controllers                                 */
   union can_control_typ {
      struct {
         byte reserved1       : 1;
         byte rec_int_ena     : 1;
         byte trans_int_ena   : 1;
         byte err_int_ena     : 1;
         byte overrun_int_ena : 1;
         byte reserved2       : 1;
         byte speed_mode      : 1;
         byte reserved3       : 1;
      } cont_bits;
      byte cont_byte;
   };

   enum can_bus_stat_t {error_active, error_passive, bus_off};



void c_first_init (void);

byte c_hw_init (byte bus_t0_reg,
                byte bus_t1_reg,
                byte out_c_reg);

void c_init_cont_reg (byte cont_reg);

void c_init_accept_reg (byte acc_code,
                        byte acc_mask);

void c_start (void);

void c_stop (void);

unsigned int c_get_rec_id (void);

byte c_rec_remote (void);

byte c_get_rec_len (void);

void c_read_rec_data (byte xdata *arr);

void c_rel_rec_reg (void);

byte c_send_obj (unsigned int identifier,
                 byte remote,
                 byte length,
                 byte xdata *arr);

void c_clr_overrun (void);

byte c_get_int_reg (void);

enum can_bus_stat_t c_get_status (void);
